#!/usr/bin/env python
# coding: utf-8

from popen2 import Popen4
import sys

def testar(nome_exe, opcao=''):
    contador = 0
    if opcao:
        nome_txt = '%s-test-%s.txt' % (nome_exe, opcao)
    else:
        nome_txt = nome_exe + '-test.txt'
    testes = file(nome_txt)
    proc = None
    lin = testes.readline()
    titulo = ''
    comando = ('./'+nome_exe+' '+opcao).strip()
    print 'TESTANDO:', comando
    while lin != '':
        if lin.startswith('#'):
            proc = Popen4(comando)
            contador += 1
            titulo = lin.replace('#','Teste %s:' % contador).strip()
            lin = testes.readline()
        elif lin.startswith('<'):
            proc.tochild.write(lin[1:])
            lin = testes.readline()
        else:
            proc.tochild.close()
            gabarito = []
            while lin != '' and lin[0] not in '#>':
                gabarito.append(lin)
                lin = testes.readline()
            gabarito = ''.join(gabarito).strip()
            saida = proc.fromchild.read().strip()
            print titulo, (72-len(titulo))*' ', 
            if gabarito == saida:
                print '  OK'
            else:
                print 'ERRO'
                print '__gabarito' + '_' * 60
                print gabarito
                print '__saida___' + '_' * 60
                print saida

nome_exe = sys.argv[1]

if len(sys.argv) > 2:
    for opcao in sys.argv[2:]:
        testar(nome_exe, opcao)
else:
    testar(nome_exe)



